package TPO_Progra_III;

import Implementaciones.Matriz;
import TDA.MatrizTDA;

public class PosicionOcupada {
	
	public  MatrizTDA<Boolean> POcup ;
	
	public PosicionOcupada(int d){
		
		POcup = new  Matriz<Boolean>();
		POcup.inicializarMatriz(d*d);
		
	}
	
	public static  MatrizTDA<Boolean> LlenarPosOcupada(MatrizTDA<Integer> M ,MatrizTDA<Boolean> MOcup){
		
		int d = M.obtenerDimension();
		d = (int) Math.sqrt(d);

		for (int i = 0; i<d;i++){
			for (int j = 0; j<d;j++){
				if ( M.obtenerValor(i,j).intValue()  == 0){
					MOcup.setearValor(i, j, false);
				}else{
					MOcup.setearValor(i, j, true);
				}
			}	
		}
		return MOcup;
	}
	
	public static  MatrizTDA<Boolean> Inicializar(MatrizTDA<Boolean> MOcup){
		
		int d = MOcup.obtenerDimension();
		d = (int) Math.sqrt(d);

		for (int i = 0; i<d;i++){
			for (int j = 0; j<d;j++){
				MOcup.setearValor(i, j, false);
			}	
		}
		return MOcup;
	}
	
	
	public static void mostrarTablero(MatrizTDA<Boolean> pOcup, int d) {
		String valor;
		
		for(int i=0; i<d; i++){		
			for(int j=0; j<d; j++){		
				valor=pOcup.obtenerValor(i, j).toString();
				if (valor.length()==1)
					valor=valor + " ";
				if (j==0)
				{
					System.out.println();
					System.out.print("" + (valor.equals("true") ? "T"  :"F") + "  ");
				}
				else
					System.out.print("" + (valor.equals("true") ? "T"  :"F") + "  ");

			}
		}
		
	}

	public static MatrizTDA<Boolean> LlenarFilOcupada(MatrizTDA<Integer> M,	MatrizTDA<Boolean> filasOcup) {
		
		
		int d = M.obtenerDimension();
		d = (int) Math.sqrt(d);

		for (int i = 0; i<d;i++){
			for (int j = 0; j<d;j++){
				if ( M.obtenerValor(i,j).intValue()  == 0){
					//filasOcup.setearValor(i, j  , false);
				}else{
					filasOcup.setearValor(i, M.obtenerValor(i,j).intValue() -1 , true);
				}
			}	
		}
		
		return filasOcup;
	}

	public static MatrizTDA<Boolean> LlenarColOcupada(MatrizTDA<Integer> M,	MatrizTDA<Boolean> colsOcup) {
		
		int d = M.obtenerDimension();
		d = (int) Math.sqrt(d);

		for (int i = 0; i<d;i++){
			for (int j = 0; j<d;j++){
				if ( M.obtenerValor(j,i).intValue()  == 0){
					//colsOcup.setearValor( j ,i, false);
				}else{
					colsOcup.setearValor( M.obtenerValor(j,i).intValue() -1,i , true);
				}
			}	
		}
		
		return colsOcup;
	}

	public static MatrizTDA<Boolean> LlenarCuadOcupada(MatrizTDA<Integer> M, MatrizTDA<Boolean> cuadrantesOcup) {
	
		return cuadrantesOcup;
	}

	public static int CantidadElementos(MatrizTDA<Integer> M, int d) {
		int cant = 0;
		for (int i = 0; i<d;i++){
			for (int j = 0; j<d;j++){
				if ( M.obtenerValor(j,i).intValue()  != 0){
					cant++;
				}
			}	
		}
		return cant;
	}
}
